package cn.edu.wynu.d2_bigDecimal;
/*
BigDecimal
用于解决浮点型运算时，出现结果失真的问题。
*/

/*
BigDecimal的常见构造器、常用方法
                构造器                                         说明
public BigDecimal(double val) 注意:不推荐使用这个     将double转换为BigDecimal
public BigDecimal(String val)                       把String转成BigDecimal

                方法名                                                    说明
public static BigDecimal valueof(double val)                      转换一个double成BigDecimal
public BigDecimal add(BigDecimal b)                               加法
public BigDecimal subtract(BigDecimal b)                          减法
public BigDecimal multiply(BigDecimal b)                          乘法
public BigDecimal divide(BigDecimal b)                            除法
public BigDecimal divide(另一个BigDecimal对象，精确几位，舍入模式)   除法、可以控制精确到小数几位
public double doubleValue()                                       将BigDecimal转换为double
*/

import java.math.BigDecimal;

public class BigDecimalDemo01 {
    public static void main(String[] args) {
        // 掌握BigDecimal的使用：解决小数运算失真的问题
        double a = 0.1;
        double b = 0.2;
        double c = a + b;
        System.out.println(c);
        System.out.println("------------------------------");

        // 1、把他们变成字符串封装成BigDecimal对象来运算。
//        BigDecimal a1 = new BigDecimal(Double.toString(a));
//        BigDecimal b1 = new BigDecimal(Double.toString(b));
        // 推荐用以下方式：把小数转换成字符串再得到BigDecimal对象来使用（更简洁）
        BigDecimal a1 = BigDecimal.valueOf(a);
        BigDecimal b1 = BigDecimal.valueOf(b);

        // BigDecimal c1 = a1.add(b1); // 加法
        // BigDecimal c1 = a1.subtract(b1);  // 减法
        // BigDecimal c1 = a1.multiply(b1); // 乘法
        BigDecimal c1 = a1.divide(b1); // 除法

        System.out.println(c1);

        BigDecimal i = BigDecimal.valueOf(0.1);
        BigDecimal j = BigDecimal.valueOf(0.3);
        BigDecimal k = i.divide(j,2,BigDecimal.ROUND_HALF_UP);
        System.out.println(k); // 0.3333333333333333 报错，没有确定精度

        // 把BigDecimal对象转换为double类型的数据
        double rs = k.doubleValue();
        System.out.println(rs); // 0.33
    }
}
